'''
冒泡排序是一种简单的排序算法，它通过反复比较相邻的两个元素并交换它们来实现排序。
具体来说，它重复地遍历要排序的数组，
比较每一对相邻的元素，如果它们的顺序不正确（即前一个元素大于后一个元素），
就交换它们。这样一来，最大（或最小）的元素就像一个“气泡”一样浮到了数组的顶部（或底部）。
这个过程持续进行，直到整个数组都有序为止。

'''
def bubble_sort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # 最后 i 个元素已经排好序，无需再比较
        for j in range(0, n-i-1):
            # 如果当前元素比下一个元素大，则交换
            compare_and_swap(arr, j, j+1)
    return arr


# 通过回调下面两个函数，来实现升序或降序排列
def bubble_sort_asc(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            compare_and_swap(arr, j, j+1)
    return arr

# 降序排列
def bubble_sort_desc(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            compare_and_swap_min(arr, j, j+1)
    return arr


# 比较数组中的两个元素，如果第一个元素大于第二个元素，则交换它们。
def compare_and_swap(arr, i, j):
    if arr[i] > arr[j]:
        arr[i], arr[j] = arr[j], arr[i]


# 比较数组中的两个元素，如果第一个元素小于第二个元素，则交换它们。
def compare_and_swap_min(arr, i, j):
    if arr[i] < arr[j]:
        arr[i], arr[j] = arr[j], arr[i]


# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = bubble_sort_desc(arr)
print("排序后的数组:", sorted_arr)
